//
//
//class Solution {
//
//    List<String> ret = new ArrayList<>();
//    StringBuilder str = new StringBuilder();
//
//    public List<String> generateParenthesis(int n) {
//        dfs(n, 0, 0, 0);
//        return ret;
//    }
//
//
//    public void dfs(int n, int index, int leftCount, int rightCount) {
//        if (index == 2 * n) {
//            ret.add(new StringBuilder(str).toString());
//            return;
//        }
//        if (rightCount > leftCount) return;
//        if (leftCount < n) {
//            str.append('(');
//            dfs(n, index + 1, leftCount + 1, rightCount);
//            str.deleteCharAt(str.length() - 1);
//        }
//        if (rightCount < n) {
//            str.append(')');
//            dfs(n, index + 1, leftCount, rightCount + 1);
//            str.deleteCharAt(str.length() - 1);
//        }
//    }
//}